了解maven的module

Java小课堂 BY武汉分院

分享人:甘乐

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

POM(Project Object model 项目对象模型),是Maven项目的核心,定义了项目的基本信息, 用于描述项目如何构建,声明项目依赖等。POM可以与实际的Java代码相独立,实现解耦或者正交性。

2.知识剖析

实际应用中,一个项目往往是由多个 project 构成的,在进行构建(build)时,针对多个 project 分别执行多次构建命令,这样极容易产生遗漏也会大大降低效率。 Maven 的聚合功能可以通过一个父模块将所有的要构建模块整合起来,将父模块的打包类型声明为 POM,通过"modules"将各模块集中到父 POM 中。

父模块不需要有源代码和资源文件,即没有 src/main/java 和 src/test/java 目录。Maven首先解析父模块的 POM 文件,分析要构建的模块,并通过各模块的依赖关系计算一个反应堆构建顺序(Reactor Build Order ), 根据这个顺序依次构建模块。将各子模块聚合到父模块中后,就可以对父模块进行一次构建命令来完成全部模块的构建。反应堆(Reactor)是所有模块组成的一个构建结果。

3.常见问题

执行mvn clean install,控制台输出提示compilation failure。

4.解决方案

由于compiler插件默认支持的java版本较低,需要对其进行配置,向pom.xml加入相关元素。 (如果未指定版本,Maven 3.0+ 会提出警告。)

Configuring Your Compiler Plugin

5.编码实战

6.扩展思考

聚合和继承存在一些共性和潜在的联系,在实际的应用中,经常将聚合模块的父模块和继承的父模块定义为同一个;并不是所有的 POM 元素都可以被继承。

inherited POM

Maven提供了dependencyManagement元素让子模块继承到父模块的依赖设置,又能保证子模块依赖使用的灵活性。完整的依赖声明 包含在在父POM中,子模块只需要配置简单的groupId和artifactId就能获得相应的依赖信息,从而引入正确的依赖。

类似的,Maven提供了pluginManagement元素帮助管理插件继承。

7.参考文献

1.许晓斌. Maven实战. 北京:机械工业出版社,2017.

2.《Guide to Working with Multiple Modules》

8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!